Lesson 12

  • v1.0.0,2016.10 by David.Yi
  • v1.1, 2020.4.30 edit by David Yi

本次内容要点

  • 列表生成器用法
  • 思考一下

列表生成式

列表生成式是 Python 内置的非常简单却强大的可以用来创建list的方法。

大家都知道,要生成一个这样的 list:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

可以用 list(range(1, 11))

那么如果要生成这样的 list:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100],应该怎么办呢?


In [1]:
# 用循环来生成

l = []
for x in range(1, 11):
    l.append(x * x)
    
print(l)


[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

In [9]:
# 用列表生成式
# 是不是更加简洁和优雅?

l = [ x * x for x in range(1, 11)]
print(l)


[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

列表生成式用法:

写列表生成式时,把要生成的元素 x * x 放到前面,后面跟 for 循环,就可以把 list 创建出来,十分有用。

在列表生成式后面还可以加上判断,过滤出结果为偶数的结果

[x * x for x in range(1, 11) if x % 2 == 0]


In [2]:
# 在列表生成式后面加上判断,过滤出结果为偶数的结果

[x * x for x in range(1, 11) if x % 2 == 0 ]


Out[2]:
[4, 16, 36, 64, 100]

In [14]:
# 可以在列表生成式中使用双重循环
# 输出一对元组,每个数在10以内,且加在一起等于5

l = [(x, y) for x in range(10) for y in range(10) if x + y == 5 if x > y]

print(l)


[(2, 0), (3, 1), (4, 2), (5, 3), (6, 4), (7, 5), (8, 6), (9, 7)]

In [1]:
# 改进之前寻找目录下指定字母开头的文件的判断方式
# 修改为使用列表生成式

import os

# 可以指定路径参数,来列出该目录下所有文件
# l = os.listdir('/Users/yijun')

# 可以判断各类情况,比如第一个是大写的 P 字母, 用列表生成式的方式,代码精简了很多
list1 =  [l for l in os.listdir('/Users/yijun') if l[0:1] == 'P']
print(list1)


['Pictures', 'PrintHood', 'PycharmProjects']
python 灵活的变量定义

In [1]:
# python 有趣灵活的变量定义

first, second, *rest = (1,2,3,4,5,6,7,8)
print(first)
print(second)
print(*rest)


1
2
3 4 5 6 7 8

In [28]:
# python 交换变量

a, b = 3, 4
a, b = b, a 
print(a)
print(b)


4
3

In [ ]: